package com.ai.tikai.entity;

import com.ai.tikai.enums.AuditSuggestion;
import com.ai.tikai.utils.SuggestionDetailsConverter;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import jakarta.persistence.*;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

public @Data
@TableName(value = "comment_audit_records")
@Entity
@Table(name = "comment_audit_records")
class CommentAuditRecord {
    /**
     * 审核记录主键ID
     * 对应数据库: id bigint auto_increment
     */
    @Id
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 关联的评论ID
     * 对应数据库: comment_id bigint
     */
    @TableField("comment_id")
    private Long commentId;

    /**
     * 最终审核建议 (pass, reject)
     * 对应数据库: overall_suggestion varchar(10)
     * 使用枚举类型保证代码的类型安全和可读性.
     * @Enumerated(EnumType.STRING) 会将枚举的名字 ("PASS", "REJECT") 存入数据库.
     * 如果数据库存储的是小写 "pass", "reject", 我们在枚举中定义即可.
     */
    @Enumerated(EnumType.STRING)
    @TableField(value = "overall_suggestion",typeHandler = JacksonTypeHandler.class)
    private AuditSuggestion overallSuggestion;

    /**
     * 最终建议的置信度得分 (0-100)
     * 对应数据库: overall_score decimal(7, 4)
     * 使用 BigDecimal 来精确表示小数.
     */
    @TableField("overall_score")
    private BigDecimal overallScore;

    /**
     * 审核命中详情 (JSON数组格式)
     * 对应数据库: details longtext (json)
     * 这是最关键的映射: 使用 @Convert 注解，指定一个自定义的转换器.
     * JPA在读写此字段时，会自动调用 SuggestionDetailsConverter 进行Java对象与JSON字符串的转换.
     */
    @Convert(converter = SuggestionDetailsConverter.class)
    @TableField(value = "details",typeHandler = JacksonTypeHandler.class)
    private List<SuggestionsLable> details;

    /**
     * AI服务返回的原始响应体
     * 对应数据库: raw_response mediumtext
     */
    @TableField("raw_response")
    private String rawResponse;

    /**
     * 记录创建时间
     * 对应数据库: created_at datetime
     * @Column(updatable = false) 确保此字段在更新时不会被修改.
     * 通常由数据库自动生成 (default current_timestamp()).
     */
    @TableField("created_at")
    private LocalDateTime createdAt;

}
